home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / textwriter / write20.s < prev    next >
Text File  |  1980-01-03  |  4KB  |  183 lines

  1.         section    a,code_c
  2.  
  3.         incdir    'work:Exsyslib/'
  4.         include    'include/hardware/custom.i'    ;define customchips
  5.         include    'include/hardware/exsys_takeover.s' ;1st codeline!
  6.  
  7.         bsr.w    initcopper
  8.  
  9.         lea    text1,a1
  10.         bsr.b    write20
  11.  
  12. loop        btst    #6,$bfe001
  13.         bne.b    loop
  14.         rts
  15.  
  16. screen_width    =    320/8    ;screen width
  17.  
  18. font_spacing    =    20    ;pixels
  19. font_height    =    24    ;pixels
  20.  
  21. write20        lea    font,a0
  22.         lea    screen1,a2
  23.  
  24. read_position    moveq    #0,d0
  25.         move.b    (a1)+,d0
  26.         move.w    d0,x
  27.  
  28.         moveq    #0,d1
  29.         move.b    (a1)+,d1
  30.         move.w    d1,y
  31.  
  32. calc_dest    moveq    #0,d0
  33.         move.w    x(pc),d0
  34.         divu    #16,d0
  35.         swap    d0
  36.         move.w    d0,d2        ; d2.w = xpos (byte position)
  37.         swap    d0
  38.         add.w    d0,d0
  39.         ext.l    d0        ; d0.w = xpos (remainder pixel offset)
  40.  
  41.         moveq    #0,d1
  42.         move.w    y(pc),d1
  43.         mulu    #screen_width*font_height,d1    ; next position down screen
  44.         add.w    d1,d0
  45.         lea    (a2,d0.w),a5
  46.  
  47. read_ascii    moveq    #0,d3
  48.         move.b    (a1)+,d3
  49.         beq.s    wrtout
  50.         cmp.w    #1,d3
  51.         bne.b    noy
  52.  
  53.         add.w    #1,y
  54.         bra.b    read_position
  55.  
  56. noy        cmp.b    #32,d3
  57.         beq.b    next
  58.  
  59. find_font    sub.w    #65,d3
  60.         cmp.b    #19,d3
  61.         ble.b    nxt1
  62.         add.w    d3,d3
  63.         add.w    d3,d3
  64.         lea    (a0,d3.w),a4
  65.         lea    44*40(a4),a4
  66.         bra.b    minterm
  67.  
  68. nxt1        cmp.b    #9,d3
  69.         ble.b    nxt2
  70.         add.w    d3,d3
  71.         add.w    d3,d3
  72.         lea    (a0,d3.w),a4
  73.         lea    22*40(a4),a4
  74.         bra.b    minterm
  75.  
  76. nxt2        add.w    d3,d3
  77.         add.w    d3,d3
  78.         lea.l    (a0,d3.w),a4
  79.  
  80. minterm        move.w    #%0000110111111100,d4    ; minterm d= a + b
  81.         ror.w    #4,d2
  82.         or.w    d2,d4            ; source 'a' shift value
  83.         bsr.b    blit
  84. next        add.w    #font_spacing,x
  85.         bra.w    calc_dest
  86.  
  87. wrtout        rts
  88.  
  89.  
  90. text1        dc.b    0,0,'TEST',1
  91.         dc.b    0,1,'ABCDEFGHIJKLMNOP',1
  92.         dc.b    0,2,'ABCDEFGHIJKLMNOP',0
  93.         even
  94.  
  95. x        dc.w    0
  96. y        dc.w    0
  97.  
  98. blit        btst    #6,$dff002
  99.         btst    #6,$dff002
  100.         bne.b    blit
  101.  
  102.         move.w    d4,$dff040        ; bltcon0
  103.         move.w    #0,$dff042        ; bltcon1
  104.         move.w    #$ffffffff,$dff044    ; mask
  105.         move.l    a4,$dff050        ; a pointer
  106.         move.l    a5,$dff04c        ; b pointer
  107.         move.l    a5,$dff054        ; d pointer
  108.         move.w    #[320-32]/8,$dff062    ; b modulo
  109.         move.w    #[320-32]/8,$dff064    ; a modulo [320-32]/8
  110.         move.w    #[320-32]/8,$dff066    ; d modulo
  111.         move.w    #[23*64+32/16],$dff058    ; size
  112.         lea    10240(a5),a5
  113.         lea    3*23*40(a4),a4    
  114.  
  115. ready2        btst    #6,$dff002
  116.         btst    #6,$dff002
  117.         bne.b    ready2
  118.  
  119.         move.w    d4,$dff040        ; bltcon0
  120.         move.w    #0,$dff042        ; bltcon1
  121.         move.w    #$ffffffff,$dff044    ; mask
  122.         move.l    a4,$dff050        ; a pointer
  123.         move.l    a5,$dff04c        ; b pointer
  124.         move.l    a5,$dff054        ; d pointer
  125.         move.w    #[320-32]/8,$dff062    ; b modulo
  126.         move.w    #[320-32]/8,$dff064    ; a modulo [320-32]/8
  127.         move.w    #[320-32]/8,$dff066    ; d modulo
  128.         move.w    #[23*64+32/16],$dff058    ; size
  129.         rts
  130.  
  131.  
  132. initcopper:    lea    copper(pc),a0
  133.         bsr.s    newcopper
  134.  
  135.         lea     plane1,a0
  136.         move.l  #screen1,d0
  137.         move.w  d0,6(a0)
  138.         swap    d0
  139.         move.w  d0,2(a0)
  140.  
  141.         lea     plane2,a0
  142.         move.l  #screen1+10240,d0
  143.         move.w  d0,6(a0)
  144.         swap    d0
  145.         move.w  d0,2(a0)
  146.  
  147.         move.l    #copper,d0
  148.         lea    adress,a0
  149.         move.w    d0,6(a0)
  150.         swap    d0
  151.         move.w    d0,2(a0)
  152.         rts
  153.         
  154. newcopper:    lea     $dff000,a6        ;a6=custom hardware
  155.         move.w    #$7fff,$96(a6)        ;no dma
  156.         move.l    a0,$80(a6)        ;install new copperlist ptr
  157.         clr.w    $88(a6)            ;strobe copper
  158.         move.w    #$83c0,$96(a6)        ;enable copper dma
  159.         rts
  160.  
  161. copper        dc    $0106,$0000,$01fc,$0000
  162.         dc    $008e,$2c81,$0090,$2cc1
  163.         dc    $0092,$0038,$0094,$00d0
  164.         dc    $0102,$0000,$0104,$0000
  165.         dc    $0108,$0000,$010a,$0000
  166.  
  167. colour        dc    $0180,$0fff,$0182,$0000
  168.         dc    $0184,$0686,$0186,$00b0
  169.         dc    $0188,$080f,$018a,$0000
  170.         dc    $018c,$0ff0,$018e,$0813
  171.  
  172. plane1        dc    $00e0,$0000,$00e2,$0000
  173. plane2        dc    $00e4,$0000,$00e6,$0000
  174.         dc    $3001,$ff00,$0100,$2200
  175.         dc    $ffe1,$fffe,$2901,$ff00
  176.         dc    $0100,$0200
  177.  
  178. adress        dc    $0084,$0000,$0086,$0000
  179.         dc    $008a,$0000,$ffff,$fffe    ; force restart
  180.  
  181. font        incbin    "ds:16x16_textwriter/greenfont2.bit"
  182. screen1        ds.b    [320/8*512]
  183.